package com.chagee.store.operation.api.enums;

import com.google.common.collect.Sets;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.math.NumberUtils;

import java.util.Objects;
import java.util.Set;

/**
 * 增值税专票：s-专票、se-电子专票、qs-电子发票（增值税专用发票）、sz-纸质发票（增值税专用发票）
 * 增值税普票：c-普票、ce-电子发票、qc-电子发票（普通发票）、cz-纸质发票（普通发票）
 *
 * @Author : hk
 * @Date : 2025/1/10
 */

@Getter
@AllArgsConstructor
public enum InvoiceTypeEnum {

	//增值税专票
	S("s", "专票"),
	SE("se", "电子专票"),
	QS("qs", "电子发票（增值税专用发票）"),
	SZ("sz", "纸质发票（增值税专用发票）"),

	//增值税普票
	C("c", "普票"),
	CE("ce", "电子发票"),
	QC("qc", "电子发票（普通发票）"),
	CZ("cz", "纸质发票（普通发票）"),

	;

	private final String type;
	private final String desc;


	public static InvoiceTypeEnum queryByType(String type) {
		for (InvoiceTypeEnum value : values()) {
			if (Objects.equals(type, value.getType())) {
				return value;
			}
		}
		return null;
	}

	//发票类型 0：增值税专用 1：增值税普通
	public static Integer queryByInvoiceType(String type) {
		if (SPECIAL_TICKET_TYPE.contains(type)) {
			return NumberUtils.INTEGER_ZERO;
		} else if (GENERAL_TICKET_TYPE.contains(type)) {
			return NumberUtils.INTEGER_ONE;
		}
		return null;
	}


	public static final Set<String> SPECIAL_TICKET_TYPE = Sets.newHashSet(
		InvoiceTypeEnum.S.getType(),
		InvoiceTypeEnum.SE.getType(),
		InvoiceTypeEnum.QS.getType(),
		InvoiceTypeEnum.SZ.getType()
	);

	public static final Set<String> GENERAL_TICKET_TYPE = Sets.newHashSet(
		InvoiceTypeEnum.C.getType(),
		InvoiceTypeEnum.CE.getType(),
		InvoiceTypeEnum.QC.getType(),
		InvoiceTypeEnum.CZ.getType()
	);

}
